{% extends "layout.html" %}
{% block head %}
    {{ super() }}

    <style type="text/css">

        @media (min-width: 768px) {
            .form-horizontal .control-label {
                text-align: left;
            }
        }
        
        label>span {
            color: deepskyblue;
        }

        #change_disk_quota_form label {
            padding-left: 0;
            padding-right: 0;
        }

        .btn,
        .form-group>div>div,
        .form-control {
            border-radius: 0;
        }

        .table {
            font-size: 12px;
            border-width: 1px;
            line-height: 22px;
        }

        .table > tbody > tr > td {
            color: #424547;
        }

        .table-bordered > tbody > tr {
            padding-top: 10px;
            padding-bottom: 10px;
        }

        .table-bordered > thead > tr > th,
        .table-bordered > tbody > tr > th,
        .table-bordered > tfoot > tr > th,
        .table-bordered > thead > tr > td,
        .table-bordered > tbody > tr > td,
        .table-bordered > tfoot > tr > td {
            border-style: solid;
            border-width: 1px 0 0 0;
        }

        .guest-label {
            color: #999999;
        }

        .guest-desc {
            color: #333333;
        }

    </style>
{% endblock head %}
{% block body %}
<script>
    var resource_path = window.location.pathname;
    var resource_path_array = resource_path.split('/');
    var uuid = resource_path_array[resource_path_array.length - 1];

    var datetime_format_type = 'time';

    function format_time(timestamp, i) {
        if (datetime_format_type === 'time') {
            return new Date(timestamp).format('HH:MM');
        } else {
            return new Date(timestamp).format('mm-dd');
        }
    }

    function render_disk_throughput_chart(disk_uuid, granularity, dev_id, dev_name) {
        var url = '/api/guest_performance/disk_io/last_hour/' + disk_uuid;
        if (granularity === 'hour') {
            url = '/api/guest_performance/disk_io/last_hour/' + disk_uuid
        } else if (granularity === 'six_hours') {
            url = '/api/guest_performance/disk_io/last_six_hours/' + disk_uuid
        } else if (granularity === 'day') {
            url = '/api/guest_performance/disk_io/last_day/' + disk_uuid
        } else {
            url = '/api/guest_performance/disk_io/last_seven_days/' + disk_uuid
        }

        $.ajax({
            url : url,
            type : 'GET',
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            error : function() {
                alter_danger('获取图表数据失败失败！');
            },
            success : function(data, textStatus, xhr) {

                if (data.data.length > 1) {
                    if ((data.data[data.data.length - 1]['timestamp'] - data.data[0]['timestamp']) >= 86400) {
                        datetime_format_type = 'date';
                    }
                }

                var option = {
                    color: ['#3BC0FF', '#FAB406'],
                    title: {
                        text: '磁盘吞吐量 - ' + dev_name
                    },
                    legend: {
                        data:['读(MBps)', '写(MBps)'],
                        bottom: 5
                    },
                    toolbox: {
                        feature: {
                            dataZoom: {
                                yAxisIndex: 'none'
                            },
                            magicType: {type: ['line', 'bar']},
                            saveAsImage: {
                                show: true,
                                pixelRatio: 4
                            }
                        }
                    },
                    tooltip: {
                        show: true,
                        trigger: 'axis',
                        formatter: (function (params, ticket, callback) {
                            var readSeriesName = params[0].seriesName;
                            var writeSeriesName = params[1].seriesName;
                            var read = params[0].data[1];
                            var write = params[1].data[1];
                            var readMarker = params[0].marker;
                            var writeMarker = params[1].marker;
                            var datetime = new Date(params[0].data[0]).format('yyyy-mm-dd HH:MM:ss');

                            if (read === null) {
                                read = '无数据';
                            }

                            if (write === null) {
                                write = '无数据';
                            }

                            return datetime + '<br />' + [readMarker, readSeriesName, read].join(' ') +
                                '<br />' + [writeMarker, writeSeriesName, write].join(' ')
                        })
                    },
                    xAxis: {
                        type: 'time',
                        axisTick: {
                            show: false
                        },
                        axisLine: {
                            lineStyle: {
                                opacity: 0.1,
                                color: '#3d4245'
                            }
                        },
                        splitLine: {
                            show: false
                        },
                        axisLabel: {
                            formatter: format_time
                        }
                    },
                    yAxis: {
                        min: 0,
                        max: 'dataMax',
                        minInterval: 2,
                        axisTick: {
                            show: false
                        },
                        axisLine: {
                            lineStyle: {
                                opacity: 0,
                                color: '#8c8f91'
                            }
                        },
                        splitLine: {
                            show: true,
                            lineStyle: {
                                width: 1,
                                opacity: 0.5
                            }
                        }
                    },
                    series: [{
                        name: '读(MBps)',
                        type: 'line',
                        showSymbol: false,
                        smooth: true,
                        lineStyle: {
                            normal: {
                                width: 1
                            }
                        },
                        data: (function () {
                            var d = [];
                            $.each(data.data, function(i, ele) {
                                d.push([
                                    ele['timestamp'] * 1000,
                                    ele['rd_bytes'] !== null ? Math.floor(ele['rd_bytes'] / 1024 / 1024 * 1000) / 1000 : null
                                ])
                            });
                            return d;
                        })()
                    },{
                        name: '写(MBps)',
                        type: 'line',
                        showSymbol: false,
                        smooth: true,
                        lineStyle: {
                            normal: {
                                width: 1
                            }
                        },
                        data: (function () {
                            var d = [];
                            $.each(data.data, function(i, ele) {
                                d.push([
                                    ele['timestamp'] * 1000,
                                    ele['wr_bytes'] !== null ? Math.floor(ele['wr_bytes'] / 1024 / 1024 * 1000) / 1000 : null
                                ])
                            });
                            return d;
                        })()
                    }]
                };

                var disk_chart = echarts.init(document.getElementById(dev_id));
                disk_chart.setOption(option);
            }
        });
    }

    function render_disk_iops_chart(disk_uuid, granularity, dev_id, dev_name) {
        var url = '/api/guest_performance/disk_io/last_hour/' + disk_uuid;
        if (granularity === 'hour') {
            url = '/api/guest_performance/disk_io/last_hour/' + disk_uuid
        } else if (granularity === 'six_hours') {
            url = '/api/guest_performance/disk_io/last_six_hours/' + disk_uuid
        } else if (granularity === 'day') {
            url = '/api/guest_performance/disk_io/last_day/' + disk_uuid
        } else {
            url = '/api/guest_performance/disk_io/last_seven_days/' + disk_uuid
        }

        $.ajax({
            url : url,
            type : 'GET',
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            error : function() {
                alter_danger('获取图表数据失败失败！');
            },
            success : function(data, textStatus, xhr) {

                if (data.data.length > 1) {
                    if ((data.data[data.data.length - 1]['timestamp'] - data.data[0]['timestamp']) >= 86400) {
                        datetime_format_type = 'date';
                    }
                }

                var option = {
                    color: ['#3BC0FF', '#FAB406'],
                    title: {
                        text: '磁盘IOPS - ' + dev_name
                    },
                    legend: {
                        data:['读(IOPS)', '写(IOPS)'],
                        bottom: 5
                    },
                    toolbox: {
                        feature: {
                            dataZoom: {
                                yAxisIndex: 'none'
                            },
                            magicType: {type: ['line', 'bar']},
                            saveAsImage: {
                                show: true,
                                pixelRatio: 4
                            }
                        }
                    },
                    tooltip: {
                        show: true,
                        trigger: 'axis',
                        formatter: (function (params, ticket, callback) {
                            var readSeriesName = params[0].seriesName;
                            var writeSeriesName = params[1].seriesName;
                            var read = params[0].data[1];
                            var write = params[1].data[1];
                            var readMarker = params[0].marker;
                            var writeMarker = params[1].marker;
                            var datetime = new Date(params[0].data[0]).format('yyyy-mm-dd HH:MM:ss');

                            if (read === null) {
                                read = '无数据';
                            }

                            if (write === null) {
                                write = '无数据';
                            }

                            return datetime + '<br />' + [readMarker, readSeriesName, read].join(' ') +
                                '<br />' + [writeMarker, writeSeriesName, write].join(' ')
                        })
                    },
                    xAxis: {
                        type: 'time',
                        axisTick: {
                            show: false
                        },
                        axisLine: {
                            lineStyle: {
                                opacity: 0.1,
                                color: '#3d4245'
                            }
                        },
                        splitLine: {
                            show: false
                        },
                        axisLabel: {
                            formatter: format_time
                        }
                    },
                    yAxis: {
                        min: 0,
                        max: 'dataMax',
                        minInterval: 2,
                        axisTick: {
                            show: false
                        },
                        axisLine: {
                            lineStyle: {
                                opacity: 0,
                                color: '#8c8f91'
                            }
                        },
                        splitLine: {
                            show: true,
                            lineStyle: {
                                width: 1,
                                opacity: 0.5
                            }
                        }
                    },
                    series: [{
                        name: '读(IOPS)',
                        type: 'line',
                        showSymbol: false,
                        smooth: true,
                        lineStyle: {
                            normal: {
                                width: 1
                            }
                        },
                        data: (function () {
                            var d = [];
                            $.each(data.data, function(i, ele) {
                                d.push([
                                    ele['timestamp'] * 1000,
                                    ele['rd_req'] !== null ? ele['rd_req'] : null
                                ])
                            });
                            return d;
                        })()
                    },{
                        name: '写(IOPS)',
                        type: 'line',
                        showSymbol: false,
                        smooth: true,
                        lineStyle: {
                            normal: {
                                width: 1
                            }
                        },
                        data: (function () {
                            var d = [];
                            $.each(data.data, function(i, ele) {
                                d.push([
                                    ele['timestamp'] * 1000,
                                    ele['wr_req'] !== null ? ele['wr_req'] : null
                                ])
                            });
                            return d;
                        })()
                    }]
                };

                var disk_chart = echarts.init(document.getElementById(dev_id));
                disk_chart.setOption(option);
            }
        });
    }

    function render_disks_chart(uuid, granularity) {
        var dev_name = '{{ disk_ret.data.device }}';
        var dev_id_throughput = 'disk_throughput_chart';
        var dev_id_iops = 'disk_iops_chart';

        render_disk_throughput_chart(uuid, granularity, dev_id_throughput, dev_name);
        render_disk_iops_chart(uuid, granularity, dev_id_iops, dev_name);
    }

    $(document).ready(function() {
        $('body').addClass('add-transition');
        $('.add-page-transition').on('click', function(){
            var transAttr = $(this).attr('data-transition');
            $('.add-transition').attr('class', 'add-transition');
            $('.add-transition').addClass(transAttr);
        });

        render_disks_chart(uuid, 'hour');

        register_iops_bps_event();
    });
    
    function refresh_render_with_specify_granularity(granularity) {
        render_disks_chart(uuid, granularity)
    }

    function refresh() {
        window.location.href=window.location.pathname;
    }

    function update_disk_quota(uuids) {
        $.ajax({
            url : '/api/disks/' + uuids.join(','),
            type : 'PATCH',
            contentType: "application/json; charset=utf-8",
            data : JSON.stringify({
                iops: parseInt($('#iops').val()),
                iops_rd: parseInt($('#iops_rd').val()),
                iops_wr: parseInt($('#iops_wr').val()),
                iops_max: parseInt($('#iops_max').val()),
                iops_max_length: parseInt($('#iops_max_length').val()),
                bps: parseInt($('#bps').val()) * 1024 * 1024,
                bps_rd: parseInt($('#bps_rd').val()) * 1024 * 1024,
                bps_wr: parseInt($('#bps_wr').val()) * 1024 * 1024,
                bps_max: parseInt($('#bps_max').val()) * 1024 * 1024,
                bps_max_length: parseInt($('#bps_max_length').val())
            }),
            error : function() {
                alter_danger('变更磁盘性能配额指令发送失败！');
            },
            success : function() {
                alter_success('变更磁盘性能配额指令发送成功！');
                refresh();
            }
        });
    }

    function change_disk_quota() {
        var uuids = [uuid];
        if (uuids) {
            update_disk_quota(uuids);
        }
        $('#change_disk_quota_modal').modal('hide');
    }

    $(function() { "use strict";
        $("#iops").TouchSpin({
            max: {{ config_ret.data.iops_cap }},
            min: 0,
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    $(function() { "use strict";
        $("#iops_rd").TouchSpin({
            max: {{ config_ret.data.iops_cap - disk_ret.data.iops_wr }},
            min: 0,
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    $(function() { "use strict";
        $("#iops_wr").TouchSpin({
            max: {{ config_ret.data.iops_cap - disk_ret.data.iops_rd }},
            min: 0,
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    $(function() { "use strict";
        $("#iops_max").TouchSpin({
            max: {{ config_ret.data.iops_max }},
            min: 0,
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    $(function() { "use strict";
        $("#iops_max_length").TouchSpin({
            max: {{ config_ret.data.iops_max_length }},
            min: 0,
            postfix: '秒',
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    $(function() { "use strict";
        $("#bps").TouchSpin({
            max: {{ (config_ret.data.bps_cap / 1024 / 1024) | int }},
            min: 0,
            postfix: 'MiB',
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    $(function() { "use strict";
        $("#bps_rd").TouchSpin({
            max: {{ ((config_ret.data.bps_cap - disk_ret.data.bps_wr) / 1024 / 1024) | int }},
            min: 0,
            postfix: 'MiB',
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    $(function() { "use strict";
        $("#bps_wr").TouchSpin({
            max: {{ ((config_ret.data.bps_cap - disk_ret.data.bps_rd) / 1024 / 1024) | int }},
            min: 0,
            postfix: 'MiB',
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    $(function() { "use strict";
        $("#bps_max").TouchSpin({
            max: {{ (config_ret.data.bps_max / 1024 / 1024) | int }},
            min: 0,
            postfix: 'MiB',
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    $(function() { "use strict";
        $("#bps_max_length").TouchSpin({
            max: {{ config_ret.data.bps_max_length }},
            min: 0,
            postfix: '秒',
            verticalbuttons: true,
            verticalupclass: 'glyph-icon icon-plus',
            verticaldownclass: 'glyph-icon icon-minus'
        });
    });

    function register_iops_bps_event() {
        $('#iops').on('change', function(){
            $("#iops_rd").trigger("touchspin.updatesettings", {max: $('#iops').val() - $('#iops_wr').val()});
            $("#iops_wr").trigger("touchspin.updatesettings", {max: $('#iops').val() - $('#iops_rd').val()});
        });

        $('#iops_rd').on('change', function(){
            $("#iops_wr").trigger("touchspin.updatesettings", {max: $('#iops').val() - $('#iops_rd').val()});
        });

        $('#iops_wr').on('change', function(){
            $("#iops_rd").trigger("touchspin.updatesettings", {max: $('#iops').val() - $('#iops_wr').val()});
        });

        $('#bps').on('change', function(){
            $("#bps_rd").trigger("touchspin.updatesettings", {max: $('#bps').val() - $('#bps_wr').val()});
            $("#bps_wr").trigger("touchspin.updatesettings", {max: $('#bps').val() - $('#bps_rd').val()});
        });

        $('#bps_rd').on('change', function(){
            $("#bps_wr").trigger("touchspin.updatesettings", {max: $('#bps').val() - $('#bps_rd').val()});
        });

        $('#bps_wr').on('change', function(){
            $("#bps_rd").trigger("touchspin.updatesettings", {max: $('#bps').val() - $('#bps_wr').val()});
        });
    }
</script>
<div class="container" style="padding-top: 100px; width: 90%; max-width: 100%;">
    <div class="panel">
        <div class="panel-body">
            <a href="javascript:history.go(-1)" class="btn btn-xs btn-default add-page-transition" data-transition="pt-page-moveFromLeft-init" style="margin-bottom: 4px; margin-left: 10px;">
                <span class="glyph-icon icon-separator" style="transform: rotateY(-180deg);">
                    <i class="glyph-icon icon-level-up"></i>
                </span>
                <span class="button-content">
                    返回
                </span>
            </a>
            <div class="row" style="margin-top: 10px;">
                <div class="col-xs-4">
                    <div style="background: #F5f6FA; border: 1px solid #e1e6eb; padding: 10px; font-size: 14px; width: 100%;">
                        <span>
                        磁盘信息
                        </span>
                    </div>
                    <table class="table table-bordered">
                        <tbody>
                        <tr>
                            <td>
                                <span class="guest-label">UUID:&nbsp;&nbsp;&nbsp;&nbsp;</span>
                                <span class="guest-desc">
                                {{ disk_ret.data.uuid }}
                                </span>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <span class="guest-label">名称:&nbsp;&nbsp;&nbsp;&nbsp;</span>
                                <span class="guest-desc">
                                {{ disk_ret.data.remark }}
                                </span>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <span class="guest-label">状态:&nbsp;&nbsp;&nbsp;&nbsp;</span>
                                <span class="guest-desc">
                                {{ format_disk_state(disk_ret.data.state)|safe }}
                                </span>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <span class="guest-label">磁盘性别:&nbsp;&nbsp;&nbsp;&nbsp;</span>
                                <span class="guest-desc">
                                    {% if disk_ret.data.sequence == 0 %}
                                        系统盘
                                    {% else %}
                                        数据盘
                                    {% endif %}
                                </span>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <span class="guest-label">磁盘容量:&nbsp;&nbsp;&nbsp;&nbsp;</span>
                                <span class="guest-desc">
                                {{ disk_ret.data.size }} GB
                                </span>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <span class="guest-label">所属虚拟机:&nbsp;&nbsp;&nbsp;&nbsp;</span>
                                <span class="guest-desc">
                                    {% if disk_ret.data.sequence != -1 %}
                                        <a href="/guest/detail/{{ disk_ret.data.guest_uuid }}">{{ guest_ret.data.label }}/{{ guest_ret.data.remark }}</a>
                                    {% else %}
                                    {% endif %}
                                </span>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <span class="guest-label">设备路径:&nbsp;&nbsp;&nbsp;&nbsp;</span>
                                <span class="guest-desc">
                                    {% if disk_ret.data.sequence >= 0 %}
                                        {{ disk_ret.data.device }}
                                    {% endif %}
                                </span>
                            </td>
                        </tr>
                        <tr>
                            <td style="padding: 0;">
                                <table style="width: 100%;">
                                    <thead>
                                    <tr class="guest-label">
                                        <th width="100%" colspan="5" style="padding: 0 9px;">
                                            <span style="position: absolute; left: 41.2%;">
                                            磁盘性能配额
                                            </span>
                                            <button class="btn btn-xs btn-default btn-shortcut" style="float: right;" data-toggle="modal" data-target="#change_disk_quota_modal">变更配额</button>
                                        </th>
                                    </tr>
                                    <tr class="guest-label">
                                        <th width="20%" style="padding: 0 9px; text-align: center;">IOPS</th>
                                        <th width="20%" style="padding: 0 9px; text-align: center;">IOPS 读</th>
                                        <th width="20%" style="padding: 0 9px; text-align: center;">IOPS 写</th>
                                        <th width="20%" style="padding: 0 9px; text-align: center;">IOPS 桶宽</th>
                                        <th width="20%" style="padding: 0 9px; text-align: center;">IOPS 桶高</th>
                                    </tr>
                                    </thead>
                                    <tbody>
                                    <tr class="guest-desc">
                                        <th style="text-align: center;">{{ disk_ret.data.iops }}</th>
                                        <th style="text-align: center;">{{ disk_ret.data.iops_rd }}</th>
                                        <th style="text-align: center;">{{ disk_ret.data.iops_wr }}</th>
                                        <th style="text-align: center;">{{ disk_ret.data.iops_max }}</th>
                                        <th style="text-align: center;">{{ disk_ret.data.iops_max_length }} 秒</th>
                                    </tr>
                                    </tbody>
                                    <thead>
                                    <tr class="guest-label">
                                        <th width="20%" style="padding: 0 9px; text-align: center;">BPS</th>
                                        <th width="20%" style="padding: 0 9px; text-align: center;">BPS 读</th>
                                        <th width="20%" style="padding: 0 9px; text-align: center;">BPS 写</th>
                                        <th width="20%" style="padding: 0 9px; text-align: center;">BPS 桶宽</th>
                                        <th width="20%" style="padding: 0 9px; text-align: center;">BPS 桶高</th>
                                    </tr>
                                    </thead>
                                    <tbody>
                                    <tr class="guest-desc">
                                        <th style="text-align: center;">{{ (disk_ret.data.bps / 1024 / 1024) | int }} MiB</th>
                                        <th style="text-align: center;">{{ (disk_ret.data.bps_rd / 1024 / 1024) | int }} MiB</th>
                                        <th style="text-align: center;">{{ (disk_ret.data.bps_wr / 1024 / 1024) | int }} MiB</th>
                                        <th style="text-align: center;">{{ (disk_ret.data.bps_max / 1024 / 1024) | int }} MiB</th>
                                        <th style="text-align: center;">{{ disk_ret.data.bps_max_length }} 秒</th>
                                    </tr>
                                    </tbody>
                                </table>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <span class="guest-label">创建时间:&nbsp;&nbsp;&nbsp;&nbsp;</span>
                                <span class="guest-desc">
                                {{ format_datetime_by_tus(disk_ret.data.create_time) }}
                                </span>
                            </td>
                        </tr>
                        </tbody>

                    </table>
                </div>
                <div class="col-xs-8">
                    <div class="row" style="margin-bottom: 20px;">
                        <div class="col-xs-8"></div>
                        <div class="col-xs-4">
                            <div class="btn-group btn-group-justified btn-group-xs">
                                <a class="btn btn-default" role="button" onclick="refresh_render_with_specify_granularity('hour');">1小时</a>
                                <a class="btn btn-default" role="button" onclick="refresh_render_with_specify_granularity('six_hours');">6小时</a>
                                <a class="btn btn-default" role="button" onclick="refresh_render_with_specify_granularity('day');">1天</a>
                                <a class="btn btn-default" role="button" onclick="refresh_render_with_specify_granularity('seven_days');">7天</a>
                            </div>
                        </div>
                    </div>
                    <div>
                        <div id="disk_throughput_chart" style="width: 800px;height:280px;"></div>
                        <div id="disk_iops_chart" style="width: 800px;height:280px;"></div>
                    </div>
                    <div id="disks_chart"></div>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="modal" id="change_disk_quota_modal" tabindex="-1" role="dialog" style="margin-top: 100px;">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title">变更磁盘配额：</h4>
            </div>
            <div class="modal-body" style="padding-left: 8%;">
                <form id="change_disk_quota_form" class="form-horizontal bordered-row">
                    <div class="form-group" style="margin-bottom: 0;">
                        <label class="col-sm-2 control-label">
                            <span class="glyph-icon icon-exchange" style="transform: rotate(90deg); display: inline-flex;"></span>
                            &nbsp;&nbsp;IOPS
                        </label>
                        <div class="col-sm-3">
                            <input id="iops" title="IOPS" class="form-control" type="text" value="{{ disk_ret.data.iops }}" name="iops">
                        </div>
                        <span class="col-sm-1"></span>
                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-openid"></span>&nbsp;&nbsp;BPS</label>
                        <div class="col-sm-3">
                            <input id="bps" title="BPS" class="form-control" type="text" value="{{ (disk_ret.data.bps / 1024 / 1024) | int }}" name="bps">
                        </div>
                        <span class="col-sm-1"></span>
                    </div>
                    <div class="form-group" style="margin-bottom: 0;">
                        <label class="col-sm-2 control-label">
                            <span class="glyph-icon icon-exchange" style="transform: rotate(90deg); display: inline-flex;"></span>
                            &nbsp;&nbsp;IOPS 读
                        </label>
                        <div class="col-sm-3">
                            <input id="iops_rd" title="IOPS 读" class="form-control" type="text" value="{{ disk_ret.data.iops_rd }}" name="iops_rd">
                        </div>
                        <span class="col-sm-1"></span>
                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-openid"></span>&nbsp;&nbsp;BPS 读</label>
                        <div class="col-sm-3">
                            <input id="bps_rd" title="BPS 读" class="form-control" type="text" value="{{ (disk_ret.data.bps_rd / 1024 / 1024) | int }}" name="bps_rd">
                        </div>
                        <span class="col-sm-1"></span>
                    </div>
                    <div class="form-group" style="margin-bottom: 0;">
                        <label class="col-sm-2 control-label">
                            <span class="glyph-icon icon-exchange" style="transform: rotate(90deg); display: inline-flex;"></span>
                            &nbsp;&nbsp;IOPS 写
                        </label>
                        <div class="col-sm-3">
                            <input id="iops_wr" title="IOPS 写" class="form-control" type="text" value="{{ disk_ret.data.iops_wr }}" name="iops_wr">
                        </div>
                        <span class="col-sm-1"></span>
                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-openid"></span>&nbsp;&nbsp;BPS 写</label>
                        <div class="col-sm-3">
                            <input id="bps_wr" title="BPS 写" class="form-control" type="text" value="{{ (disk_ret.data.bps_wr / 1024 / 1024) | int }}" name="bps_wr">
                        </div>
                        <span class="col-sm-1"></span>
                    </div>
                    <div class="form-group" style="margin-bottom: 0;">
                        <label class="col-sm-2 control-label">
                            <span class="glyph-icon icon-exchange" style="transform: rotate(90deg); display: inline-flex;"></span>
                            <span class="glyph-icon icon-bitbucket" style="margin-left: -4px;"></span>
                            &nbsp;&nbsp;IOPS 桶宽
                        </label>
                        <div class="col-sm-3">
                            <input id="iops_max" title="IOPS 桶宽" class="form-control" type="text" value="{{ disk_ret.data.iops_max }}" name="iops_max">
                        </div>
                        <span class="col-sm-1"></span>
                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-openid"></span><span class="glyph-icon icon-bitbucket"></span>&nbsp;&nbsp;BPS 桶宽</label>
                        <div class="col-sm-3">
                            <input id="bps_max" title="BPS 桶宽" class="form-control" type="text" value="{{ (disk_ret.data.bps_max / 1024 / 1024) | int }}" name="bps_max">
                        </div>
                        <span class="col-sm-1"></span>
                    </div>
                    <div class="form-group" style="margin-bottom: 0;">
                        <label class="col-sm-2 control-label">
                            <span class="glyph-icon icon-exchange" style="transform: rotate(90deg); display: inline-flex;"></span>
                            <span class="glyph-icon icon-bitbucket" style="margin-left: -4px;"></span>
                            &nbsp;&nbsp;IOPS 桶高
                        </label>
                        <div class="col-sm-3">
                            <input id="iops_max_length" title="IOPS 桶高" class="form-control" type="text" value="{{ disk_ret.data.iops_max_length }}" name="iops_max_length">
                        </div>
                        <span class="col-sm-1"></span>
                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-openid"></span><span class="glyph-icon icon-bitbucket"></span>&nbsp;&nbsp;BPS 桶高</label>
                        <div class="col-sm-3">
                            <input id="bps_max_length" title="BPS 桶高" class="form-control" type="text" value="{{ disk_ret.data.bps_max_length }}" name="bps_max_length">
                        </div>
                        <span class="col-sm-1"></span>
                    </div>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-sm btn-primary" onclick="change_disk_quota();">确定</button>
                <button type="button" class="btn btn-sm btn-default" data-dismiss="modal">取消</button>
            </div>
        </div>
    </div>
</div>
{% endblock body %}
